<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <p></p>
    <img src="./image/tcp协议.png" alt="">
    <p>https通信之前先确定证书</p>
    <img src="./image/https加密通信.png" alt="">
    <script src="../第二阶段-js基础和响应式布局/js/jquery-3.3.1.min.js"></script>
<script>
//接口示例地址 http://peiqi.vfing.com/swagger/index.html
    var a = 1;
//  HTTP1.0定义了三种请求方法： GET, POST 和 HEAD方法。
//  HTTP1.1新增了五种请求方法：OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
//get 请求
// var ajax = new XMLHttpRequest();
// ajax.open('get','http://wu-admin-server.wuliang666.com/demo/getBanner');
// ajax.send();
// ajax.onreadystatechange = function(){
//     if (ajax.readyState == 4 && ajax.status == 200) {
//         console.log(JSON.parse(ajax.responseText))
//         console.log(ajax.responseURL)
//     }
// }
//post 请求
var xhr = new XMLHttpRequest();
xhr.open('post',"http://wu-admin-server.wuliang666.com/demo/getCode");
xhr.setRequestHeader('Content-type',"application/x-www-form-urlencoded");
xhr.send('phone="13634186451"');
xhr.onreadystatechange = function(){
    if (xhr.readyState == 4 && xhr.status == 200) {
        console.log(JSON.parse(xhr.responseText))
        console.log(xhr.responseType)
    }
}
//ajax 请求
$.ajax({
    method:"get", //请求方法
    url:'http://wu-admin-server.wuliang666.com/demo/getBanner', //请求地址
    data:{}, //请求的数据
    success:function(res){  //成功回调
       console.log(JSON.parse(res));
    },
    error:function(err){  // 失败回调
        console.log(err) 
    }
})
//跨域请求 Access to XMLHttpRequest at 'http://peiqi.vfing.com/api/app/get_banner' from origin 'null' has been blocked by CORS policy: 
//No 'Access-Control-Allow-Origin' header is present on the requested resource.
$.ajax({
    method:"get", //请求方法
    url:'http://peiqi.vfing.com:80/api/app/get_banner', //请求地址
    data:{}, //请求的数据
    success:function(res){  //成功回调
       console.log(JSON.parse(res));
    },
    error:function(err){  // 失败回调
        console.log(err) 
    }
})
//JSONP 需要后端配合支持( 没人用了 )
$.ajax({
    url: 'http://localhost:8088/demo/getBanner',
    type: 'get',
    dataType: 'jsonp',  // 请求方式为jsonp
    jsonpCallback: "handleCallback",    // 自定义回调函数名
    data: {}
});
function handleCallback(res){
   console.log(res)
}
//什么是跨域，是由浏览器同源策略限制的一类请求场景。
//什么是同源策略？
//同源策略/SOP（Same origin policy）是一种约定，由Netscape公司1995年引入浏览器，它是浏览器最核心也最基本的安全功能，如果缺少了同源策略，
//浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同，即便两个不同的域名指向同一个ip地址，也非同源。
// 1.Cookie、LocalStorage 和 IndexDB 无法读取
// 2.DOM 和 Js对象无法获得
// 3.AJAX 请求不能发送
// URL                                      说明                    是否允许通信
// http://www.domain.com/a.js
// http://www.domain.com/b.js         同一域名，不同文件或路径           允许
// http://www.domain.com/lab/c.js

// http://www.domain.com:8000/a.js
// http://www.domain.com/b.js         同一域名，不同端口                不允许
 
// http://www.domain.com/a.js
// https://www.domain.com/b.js        同一域名，不同协议                不允许
 
// http://www.domain.com/a.js
// http://192.168.4.12/b.js           域名和域名对应相同ip              不允许
 
// http://www.domain.com/a.js
// http://x.domain.com/b.js           主域相同，子域不同                不允许
// http://domain.com/c.js
 
// http://www.domain1.com/a.js
// http://www.domain2.com/b.js        不同域名                         不允许

// 1:配置代理 ( nginx )
// 2:中间层转发（node）

//描述网页从输入url到渲染的过程 ????????面试题
// 1.首先获取url 解析出ip地址 如果本地hosts中有配置优先取出配置  若没有则进行dns解析
// 2.tcp 三次挥手 建立连接
// 3.客户端发送http请求
// 4.服务器处理请求并响应
// 5.浏览器处理资源文件进行渲染
// 6.tcp的四次挥手
//三次握手
//下面符号的含义 SYN(联机) ACK(确认) FIN(结束)
//1:第一次握手：客户端采用TCP协议将带有SYN标志的数据包发送给服务器，等待服务器的确认。
//2:第二次握手：服务器端在收到SYN的数据包后，必须确认SYN，并发送的ACK标志，同时，自己也将会向客户端发送一个SYN标志。
//3:第三次握手：客户端在接收到服务器段的SYN+ACK包后，自己会向服务器发送ACK包，完成三次握手。那么客户端和服务器正式建立了连接，开始传输数据。
//四次挥手
// 1. 当客户端的数据传输到尾部时，客户端向服务器发送带有FIN标志的数据包，使其明白自己准备断开通信了。 TCP规定，FIN报文段即使不携带数据，也要消耗一个序号。
// 2. 因为TCP的通信是使用全双工通信的，所以在断开连接的时候也应该是双向的；当服务器收到带有FIN标志的数据包时，
//    其必不会直接发送FIN标志断开通信的请求，而是先发送一个带有ACK标志的应答信息，使客户端明白服务器还有数据要进行发送。
// 3. 服务器的数据发送完成后，向客户端发送带有FIN标志的数据包，通知客户端断开连接。
// 4. 当客户端收到FIN后，担心某些不可控制的因素导致服务器不知道他要断开连接，会发送ACK进行确认，同时把自己设置成TIME_WAIT状态并启动定时器，
//    在TCP的定时器到达后客户端并没有接收到请求，会重新发送；当服务器收到请求后就断开连接；当客户端等待2MLS（两倍报文最大生存时间）后，
//    没有收到请求重传的请求后，客户端这边就断开连接，整个TCP通信就结束了。
//https 的传输过程
// 1.在服务器端存在一个公钥及私钥
// 2.客户端从服务器取得这个公钥
// 3.客户端产生一个随机的密钥
// 4.客户端通过公钥对密钥加密（非对称加密=>双方各有一个公钥和私钥    a把自己的公钥给b    b把自己的公钥给a  a给b发信息的时候通过b的公钥加密，b拿到后通过自己的私钥解密）
// 5.客户端发送到服务器端
// 6.服务器端接受这个密钥并且以后的服务器端和客户端的数据全部通过这个密钥加密
//http与https的区别 面试题
// 1.https需要证书。
// 2.http是超文本传输协议，是明文传输，https则是具有安全性的ssl加密传输协议。
// 3.http和https使用的端口不同，前者是80，后者是443。
// 4.http的连接很简单，无状态；HTTPS是由SSL+HTTP构建的可进行加密传输、身份认证的网络协议，比http协议安全。

// 请求状态码  面试题 //详细内容参考这里 200 204 302 304 400 404 403 500 502 503
// https://juejin.im/post/5a276865f265da432c23b8d2 
</script>
</body>
</html>